2014-02-21 54 views
0

我建立一個列表:如何將N個元素添加到列表中?

int TOTAL = 10; 
List<MyObject> myList = myOtherList.Select 
      (s => new MyObject 
      { 
       Prop1 = s.prop1 
      }) 
      .ToList<MyObject>(); 

這裏myList具有M個元素(M = myList.Count())

我需要追加N元素myList中使得myList共有的元件,在其他字N+M = TOTAL

我該如何實現它?

+2

你從哪裏得到N個元素? –

+3

做一個簡單的循環? – poke

回答

1

這將從myOtherList獲得「n」個元素,並將它們添加到myList

myList.AddRange(myOtherList.Select(s => new MyObject { Prop1 = s.prop1 }).Take(n)); 

的好處約Take的是,如果沒有在myOtherList足夠的元素,它不會引起錯誤 - 它只會得到所有的元素。

如果計數超過元件在數,的所有元素被返回。

如果計數小於或等於零,不枚舉並返回一個空的IEnumerable。

+0

採取絕對是一種方式。沒想到它。 – Tarec

2

只要不斷增加新的項目,直到你打你想要的大小:

while (myList.Count < TOTAL) 
{ 
    myList.Add(NewItem); 
} 
+0

OP想要一個Linq方法 –

+3

你從哪裏拿?這對我來說並不明顯;一個簡單的循環當然是更簡單和更直接的方法。 – poke

+0

來自標籤和他試圖去做的方式 –

-1

嘗試

myList.AddRange() 

這是用來列表添加到現有列表。 (它可以與任何與現有列表相同類型的IEnumerable工作)。

明顯下降...... ooooh我沒有意識到我們必須爲人們編寫完整的解決方案,並且我認爲我明智地花了10年的時間學習軟件開發,當時我可以用堆棧溢出代替我的大腦

2

LINQ方法:

myList.AddRange(Enumerable.Range(0, TOTAL - myList.Count).Select(i => myList2[i])); 

只記得檢查myList.Count是否比TOTAL小,myList2有足夠的元素。

1

這裏一個完整的示例illustratting你怎麼可以用代碼

list.AddRange(list2.Take(total - list.Count)); 

完整的例子單行實現這一

internal class Program 
{ 
    private static void Main(string[] args) 
    {   
     List<MyObject> list = new List<MyObject>(); 

     for (int i = 0; i < 5; i++) 
     { 
      list.Add(new MyObject() {Id = i} 
       ); 
     } 

     List<MyObject> list2 = new List<MyObject>(); 

     for (int i = 0; i < 5; i++) 
     { 
      list2.Add(new MyObject() {Id = i}); 
     } 

     int total = 10; 
     list.AddRange(list2.Take(total - list.Count)); 
    } 

    class MyObject 
    { 
     public int Id { get; set; } 
    } 
} 
0

您可以通過使用myList.AddRange()參數中的有限列表或在ForEach Linq中使用myList.Add()。

int TOTAL = 10; 
List<MyObject> myList = something; 
if (myList < TOTAL) 
{ 
    myOtherList.Select 
     (s => new MyObject 
     { 
      Prop1 = s.prop1 
     }) 
     .ToList<MyObject>() 
     .Take(TOTAL - myList.Count) 
     .ForEach(ob => myList.Add(ob)); 
} 

int TOTAL = 10; 
List<MyObject> myList = something; 
if (myList < TOTAL) 
{ 
    myList.AddRange(myOtherList.Select 
     (s => new MyObject 
     { 
      Prop1 = s.prop1 
     }) 
     .ToList<MyObject>() 
     .Take(TOTAL - myList.Count)); 
} 
0

什麼:

public static IEnumerable<T> ConcatN<T>(this IEnumerable<T> source, IEnumerable<T> source2, int maxSize) 
{ 
    if (maxSize == 0) 
     throw new ArgumentException(
      "maxSize cannot be zero", "maxSize"); 

    var sourceCount = source.Count(); 

    if (sourceCount > maxSize) 
     throw new ArgumentException(
      "source has more elements than the given maxSize"); 

    if (sourceCount + source2.Count() < maxSize) 
     throw new ArgumentOutOfRangeException(
      "source and source2 has combined, more elements than the given maxSize"); 

    return source.Concat(source2.Take(maxSize - sourceCount)); 
} 
  • 如果項目在source數量超過給定的maxSize,一個異常throwen。
  • 如果source + source2中的項目數少於給定的maxSize,則會發生異常。

用法:

var number1 = Enumerable.Range(0, 10); 
var number2 = Enumerable.Range(100, 10); 

var number12 = number1.ConcatN(number2, 15); 

Console.WriteLine("Length = {0} | Sum = {1}", 
    number12.Count(), number12.Sum()); 

// Output: "Length = 15 | Sum = 555" 
相關問題