1
और अतिरिक्त 2
और 3
पर क्या हुआ? आप अलग-अलग मान लिए देख रहे हैं:
var one = new List<int> { 1, 2, 3 };
var two = new List<int> { 1, 2, 3, 4, 5 };
foreach (var x in one.Union(two)) Console.Write("{0} ", x);
आप 1 2 3 4 5
देंगे तुम सिर्फ दूसरा तो पहले से संलग्न सूची के लिए देख रहे हैं:
foreach(var x in one.Concat(two)) // ...
आप दे देंगे 1 2 3 1 2 3 4 5
संपादित: ओह, मैं देख रहा हूँ, आपके एक प्रकार के लिए देख रहे हैं, लेकिन जो अतिरिक्त भागों को लौटाता है।इस प्रयास करें:
public static IEnumerable<V> Zip<T, U, V>(
this IEnumerable<T> one,
IEnumerable<U> two,
Func<T, U, V> f)
{
using (var oneIter = one.GetEnumerator()) {
using (var twoIter = two.GetEnumerator()) {
while (oneIter.MoveNext()) {
twoIter.MoveNext();
yield return f(oneIter.Current,
twoIter.MoveNext() ?
twoIter.Current :
default(U));
}
while (twoIter.MoveNext()) {
yield return f(oneIter.Current, twoIter.Current);
}
}
}
}
और यहाँ एक और एक सामान्य जिप समारोह की तरह है कि, जो अतिरिक्त वापस नहीं करता है:
public static IEnumerable<V> Zip<T, U, V>(
this IEnumerable<T> one,
IEnumerable<U> two,
Func<T, U, V> f)
{
using (var oneIter = one.GetEnumerator()) {
using (var twoIter = two.GetEnumerator()) {
while (oneIter.MoveNext()) {
yield return f(oneIter.Current,
twoIter.MoveNext() ?
twoIter.Current :
default(U));
}
}
}
}
उदाहरण उपयोग:
var one = new List<int> { 1, 2, 3, 4, 5};
var two = new List<char> { 'h', 'e', 'l', 'l', 'o' };
foreach (var x in one.Zip(two, (a,b) => new {A = a, B =b }))
Console.WriteLine("{0} => '{1}'", x.A, x.B);
में परिणाम :
1 => 'एच'
2 => 'ई'
3 => 'l'
4 => 'l'
5 => 'o'
आपको एक लूप लिखना होगा। – jjnguy
क्या आप अलग-अलग मूल्यों की तलाश कर रहे हैं (कोई पुनरावृत्ति नहीं? इसके अलावा, 1? –
के बारे में क्या मतलब है {2,4,6,4,5}? Ie {1 + 1, 2 + 2, 3 + 3, 0+ 4, 0 + 5)? –