如果我有一个IEnumerable像:
string[] items = new string[] { "a", "b", "c", "d" };
Run Code Online (Sandbox Code Playgroud)
我想循环通过所有连续项目(大小为2的滑动窗口).这将是
("a","b"), ("b", "c"), ("c", "d")
Run Code Online (Sandbox Code Playgroud)
我的解决方案就是这样
public static IEnumerable<Pair<T, T>> Pairs(IEnumerable<T> enumerable) {
IEnumerator<T> e = enumerable.GetEnumerator(); e.MoveNext();
T current = e.Current;
while ( e.MoveNext() ) {
T next = e.Current;
yield return new Pair<T, T>(current, next);
current = next;
}
}
// used like this :
foreach (Pair<String,String> pair in IterTools<String>.Pairs(items)) {
System.Out.PrintLine("{0}, {1}", pair.First, pair.Second)
}
Run Code Online (Sandbox Code Playgroud)
当我编写这段代码时,我想知道.NET框架中是否已经存在执行相同操作的函数,并且它不仅适用于对,而且适用于任何大小的元组.恕我直言应该有一个很好的方法来做这种滑动窗口操作.
我使用C#2.0,我可以想象使用C#3.0(w/LINQ)有更多(更好)的方法来做到这一点,但我主要对C#2.0解决方案感兴趣.不过,我也很欣赏C#3.0解决方案.
给定列表l1 = {1, 2},l2 = {4, 5, 6 }我想获得一个包含元素的新列表:
rez = { {1, 4}, {1, 5}, {1, 6}, {2, 4}, {2, 5}, {2, 6} }
Run Code Online (Sandbox Code Playgroud)
建议?
我有项目列表,例如:{ i1, i2, i3, i4, i5, i6, i7 }.
我想获得一个列表,其中每个项目都是源列表中的一对项目:{ {i1, i2}, {i3, i4}, {i5, i6}, {i7} }.
i7是一对中的单个项目,因为没有项目i8.
是否可以使用LINQ?
在有序集(数组,列表)上使用LINQ,有没有办法选择或以其他方式使用两个连续项?我在想象语法:
list.SelectTwo((x, y) => ...)
Run Code Online (Sandbox Code Playgroud)
凡x与y位于索引项i和i + 1列表/阵列英寸 可能没有办法做到这一点,我接受这种可能性,但我至少想说我试图找到答案.
我知道我可以使用其他东西和LINQ来实现这一点.
先感谢您.
我想在行中的值之间的差异大于5时创建一个新组.
例:
int[] list = {5,10,15,40,45,50,70,75};
Run Code Online (Sandbox Code Playgroud)
应该给我3组:
1,[ 5,10,15 ]
2,[40,45,50]
3,[70,75]
Run Code Online (Sandbox Code Playgroud)
可以在这里使用Linq吗?
谢谢!
如何将a转换String[]为IDictionary<String, String>?
索引0,2,4,...处的值应为键,因此索引1,3,5,...处的值应为值.
例:
new[] { "^BI", "connectORCL", "^CR", "connectCR" }
Run Code Online (Sandbox Code Playgroud)
=>
new Dictionary<String, String> {{"^BI", "connectORCL"}, {"^CR", "connectCR"}};
Run Code Online (Sandbox Code Playgroud)