【idior】.Net2.0的集合操作 --- What i hope?
在.Net1.0中需要自己做Typed Collection,這樣可以把遍歷集合的操作放入集合本身.
可是在.Net2.0中提供了泛型機制,我總不能為了隱藏遍歷集合的操作而復古(自己做Typed Collection)吧.
幸運的是發現.Net2.0。你會發現在.Net2.0的List
class Program
{
static void Main(string[] args)
{
List<string> strs = new List<string>();
strs.Add("hello");
strs.Add("world");
strs.ForEach(Console.WriteLine)
}
}
{
static void Main(string[] args)
{
List<string> strs = new List<string>();
strs.Add("hello");
strs.Add("world");
strs.ForEach(Console.WriteLine)
}
}
怎麼樣? 看不到foreach(string str in strs)這樣的操作了吧.
為什麼要這樣做? 具體原因以及.Net1.0下的實現方法請見here(文章有點長, 耐心點喔, 看完應該有收穫的)
不過, List
也就是提供一個類似於下面這樣的方法:
ForSpecification(Predicate<T>, Action<T>);
如果這樣豈不是完美了? 既然做了ForEach為什麼MS不做ForSpecification呢?
現在我要想實現這樣的功能只能用Find(Predicate<T>)方法找出集合中符合條件的元素, 然後再對它進行遍歷。乾脆象.Net1.0下自己實現一個集合操作的輔助類吧. 不過有了泛型的支援,實現方法肯定比以前的簡單很多.不過目的和思想都是一樣的.
class Algorithm
{
public static void ForSpecification<T>(IEnumerable<T> collection, Action<T> action, Predicate<T> filter)
{
foreach (T obj in collection)
{
if (filter(obj))
action(obj);
}
}
}
{
public static void ForSpecification<T>(IEnumerable<T> collection, Action<T> action, Predicate<T> filter)
{
foreach (T obj in collection)
{
if (filter(obj))
action(obj);
}
}
}
class Program
{
static void Main(string[] args)
{
IList<string> strs = new List<string>();
strs.Add("hello");
strs.Add("world");
strs.Add("hide");
Algorithm.ForSpecification<string>(
strs,
Console.WriteLine,
delegate(string str)
{
//return true; Hide will be output
return str.Contains("o"); //if string contains 'o' then output
});
}
}
{
static void Main(string[] args)
{
IList<string> strs = new List<string>();
strs.Add("hello");
strs.Add("world");
strs.Add("hide");
Algorithm.ForSpecification<string>(
strs,
Console.WriteLine,
delegate(string str)
{
//return true; Hide will be output
return str.Contains("o"); //if string contains 'o' then output
});
}
}
ok? 即使不支援ForEach以及Find方法的集合也可以使用這個輔助類來完成相應的操作.
其實還可以在輔助類中添一些方法,比如讓集合中的元素相加,並返回結果, 留給大家自己實現吧.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-349332/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【idior】.Net2.0的集合操作 --- What i know?
- what-i-learned-from-analysis-vuepressVue
- 04 - Mongdb的集合操作
- Oracle 集合操作Oracle
- Scala 中的集合(一):集合型別與操作型別
- Hadoop的I/O操作Hadoop
- Redis有序集合操作Redis
- Linq 集合操作
- go操作redis的有序集合(zset)GoRedis
- Oracle的集合操作(union、union all、intersect、minus集合函式)Oracle函式
- What is the difference betn i step=2 and i step=3 in variable user exit EXIT SAPLRRS0 001
- New start new hope!
- Hopes for the New Year
- What are HANA's models of cloud computing, and which should I choose?Cloud
- MySQL 命令列操作集合MySql命令列
- MongoDB 集合的插入、更新、刪除操作MongoDB
- javascript操作Select中的options集合JavaScript
- 對.NET2.0泛型初步理解泛型
- GoldenGate - What is supported and what is not ....Go
- 02. I/O 操作
- 想入門者請近.[翻譯]what programming language should I learn?
- compilephpwithopensslonmacosxerror填坑CompilePHPMacError
- php操作redis,有序集合zsetPHPRedis
- Python集合操作總結Python
- Dart 集合操作外掛 DartXDart
- C#操作XML方法集合C#XML
- Linux 日常操作命令集合 -1程式操作Linux
- What is it?
- I/O流以及檔案的基本操作
- 流?I/O 操作?阻塞?epoll?
- Python&Redis 無序集合set、有序集合zset操作PythonRedis
- I don’t know what to say 事件的 NPM 包中獎名單,有你在用的嗎?事件NPM
- 使用withopen語句(未完)
- 3-python 元組 字典 集合的操作Python
- Python集合(set)型別的操作總結Python型別
- Pyspark資料基礎操作集合Spark
- 查詢集合操作intersect與minus
- 結果集集合操作(待更新)