框架上传
This commit is contained in:
@@ -0,0 +1,188 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Stary.Evo
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
[ClassAPI("01.FluentAPI.CSharp", "System.Collections", 3)]
|
||||
[APIDescriptionCN("针对 System.Collections 提供的链式扩展,理论上任何集合都可以使用")]
|
||||
[APIDescriptionEN("The chain extension provided by System.Collections can theoretically be used by any collection")]
|
||||
#endif
|
||||
public static class CollectionsExtension
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
// v1 No.4
|
||||
[MethodAPI]
|
||||
[APIDescriptionCN("遍历 IEnumerable")]
|
||||
[APIDescriptionEN("ForEach for IEnumerable")]
|
||||
[APIExampleCode(@"
|
||||
IEnumerable<int> testIEnumerable = new List<int> { 1, 2, 3 };
|
||||
testIEnumerable.ForEach(number => Debug.Log(number));
|
||||
// output
|
||||
// 1
|
||||
// 2
|
||||
// 3
|
||||
new Dictionary<string, string>()
|
||||
{
|
||||
{""name"",""liangxie""},
|
||||
{""company"",""liangxiegame"" }
|
||||
}
|
||||
.ForEach(keyValue => Debug.LogFormat(""key:{0},value:{1}"", keyValue.Key, keyValue.Value));
|
||||
// key:name,value:liangxie
|
||||
// key:company,value:liangxiegame")]
|
||||
#endif
|
||||
public static IEnumerable<T> ForEach<T>(this IEnumerable<T> self, Action<T> action)
|
||||
{
|
||||
foreach (var item in self)
|
||||
{
|
||||
action(item);
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
// v1 No.5
|
||||
[MethodAPI]
|
||||
[APIDescriptionCN("List 倒序遍历")]
|
||||
[APIDescriptionEN("Reverse ForEach for List")]
|
||||
[APIExampleCode(@"
|
||||
var testList = new List<int> { 1, 2, 3 };
|
||||
testList.ForEachReverse(number => number.LogInfo());
|
||||
// 3 2 1
|
||||
")]
|
||||
#endif
|
||||
public static List<T> ForEachReverse<T>(this List<T> selfList, Action<T> action)
|
||||
{
|
||||
for (var i = selfList.Count - 1; i >= 0; --i)
|
||||
action(selfList[i]);
|
||||
|
||||
return selfList;
|
||||
}
|
||||
|
||||
|
||||
#if UNITY_EDITOR
|
||||
// v1 No.6
|
||||
[MethodAPI]
|
||||
[APIDescriptionCN("遍历 List (可获得索引)")]
|
||||
[APIDescriptionEN("foreach List (can get index)")]
|
||||
[APIExampleCode(@"
|
||||
var testList = new List<string> {""a"", ""b"", ""c"" };
|
||||
testList.Foreach((c,index)=>Debug.Log(index));
|
||||
// 1, 2, 3,
|
||||
")]
|
||||
#endif
|
||||
public static void ForEach<T>(this List<T> list, Action<int, T> action)
|
||||
{
|
||||
for (var i = 0; i < list.Count; i++)
|
||||
{
|
||||
action(i, list[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#if UNITY_EDITOR
|
||||
// v1 No.7
|
||||
[MethodAPI]
|
||||
[APIDescriptionCN("遍历字典")]
|
||||
[APIDescriptionEN("ForEach Dictionary")]
|
||||
[APIExampleCode(@"
|
||||
var infos = new Dictionary<string,string> {{""name"",""liangxie""},{""age"",""18""}};
|
||||
infos.ForEach((key,value)=> Debug.LogFormat(""{0}:{1}"",key,value);
|
||||
// name:liangxie
|
||||
// age:18
|
||||
")]
|
||||
#endif
|
||||
public static void ForEach<K, V>(this Dictionary<K, V> dict, Action<K, V> action)
|
||||
{
|
||||
var dictE = dict.GetEnumerator();
|
||||
|
||||
while (dictE.MoveNext())
|
||||
{
|
||||
var current = dictE.Current;
|
||||
action(current.Key, current.Value);
|
||||
}
|
||||
|
||||
dictE.Dispose();
|
||||
}
|
||||
|
||||
|
||||
#if UNITY_EDITOR
|
||||
// v1 No.8
|
||||
[MethodAPI]
|
||||
[APIDescriptionCN("合并字典")]
|
||||
[APIDescriptionEN("Merge Dictionaries")]
|
||||
[APIExampleCode(@"
|
||||
var dictionary1 = new Dictionary<string, string> { { ""1"", ""2"" } };
|
||||
var dictionary2 = new Dictionary<string, string> { { ""3"", ""4"" } };
|
||||
var dictionary3 = dictionary1.Merge(dictionary2);
|
||||
dictionary3.ForEach(pair => Debug.LogFormat(""{0}:{1}"", pair.Key, pair.Value));
|
||||
// 1:2
|
||||
// 3:4
|
||||
|
||||
// notice: duplicate keys are not supported.
|
||||
// 注意:不支持重复的 key。
|
||||
")]
|
||||
#endif
|
||||
public static Dictionary<TKey, TValue> Merge<TKey, TValue>(this Dictionary<TKey, TValue> dictionary,
|
||||
params Dictionary<TKey, TValue>[] dictionaries)
|
||||
{
|
||||
return dictionaries.Aggregate(dictionary,
|
||||
(current, dict) => current.Union(dict).ToDictionary(kv => kv.Key, kv => kv.Value));
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
// v1 No.9
|
||||
[MethodAPI]
|
||||
[APIDescriptionCN("字典添加新的字典")]
|
||||
[APIDescriptionEN("Dictionary Adds a new dictionary")]
|
||||
[APIExampleCode(@"
|
||||
var dictionary1 = new Dictionary<string, string> { { ""1"", ""2"" } };
|
||||
var dictionary2 = new Dictionary<string, string> { { ""1"", ""4"" } };
|
||||
var dictionary3 = dictionary1.AddRange(dictionary2,true); // true means override
|
||||
dictionary3.ForEach(pair => Debug.LogFormat(""{0}:{1}"", pair.Key, pair.Value));
|
||||
// 1:2
|
||||
// 3:4
|
||||
|
||||
// notice: duplicate keys are supported.
|
||||
// 注意:支持重复的 key。
|
||||
")]
|
||||
#endif
|
||||
public static void AddRange<K, V>(this Dictionary<K, V> dict, Dictionary<K, V> addInDict,
|
||||
bool isOverride = false)
|
||||
{
|
||||
var enumerator = addInDict.GetEnumerator();
|
||||
|
||||
while (enumerator.MoveNext())
|
||||
{
|
||||
var current = enumerator.Current;
|
||||
if (dict.ContainsKey(current.Key))
|
||||
{
|
||||
if (isOverride)
|
||||
dict[current.Key] = current.Value;
|
||||
continue;
|
||||
}
|
||||
|
||||
dict.Add(current.Key, current.Value);
|
||||
}
|
||||
|
||||
enumerator.Dispose();
|
||||
}
|
||||
|
||||
|
||||
// TODO:
|
||||
public static bool IsNullOrEmpty<T>(this T[] collection) => collection == null || collection.Length == 0;
|
||||
// TODO:
|
||||
public static bool IsNullOrEmpty<T>(this IList<T> collection) => collection == null || collection.Count == 0;
|
||||
// TODO:
|
||||
public static bool IsNullOrEmpty<T>(this IEnumerable<T> collection) => collection == null || !collection.Any();
|
||||
// TODO:
|
||||
public static bool IsNotNullAndEmpty<T>(this T[] collection) => !IsNullOrEmpty(collection);
|
||||
// TODO:
|
||||
public static bool IsNotNullAndEmpty<T>(this IList<T> collection) => !IsNullOrEmpty(collection);
|
||||
// TODO:
|
||||
public static bool IsNotNullAndEmpty<T>(this IEnumerable<T> collection) => !IsNullOrEmpty(collection);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user