3

很简单的问题。我有一个值列表,我想用空值填充,这样我总是返回 X 个项目。

List<int> list = new List<int>() { 10, 20, 30 };

IEnumerable<int> values = list
     .OrderByDescending( i => i )
     .Union( Enumerable.Repeat( 0 , 5 ) );

foreach (var item in values.Take(5))
   Console.Write( item + " ");

我希望输出像“30 20 10 0 0”但令人惊讶的是我只得到“30 20 10 0”。

foreach (var i in Enumerable.Repeat( 0, 5 ).Take(3))
    Console.Write( i + " " );

此代码将返回“0 0 0”。同样,“ list.Take(3)”返回“30 20 10”。

4

2 回答 2

5

并集的概念,作为一种集合论运算,具有隐含的“独特性”。如果您不希望这样:使用Concat而不是Union.

于 2012-11-21T10:54:07.650 回答
5

原因是Enumerable.Union删除重复项。因此,您可能想改用Enumerable.Concat不删除重复项的 dsoes。

我更喜欢的另一个选项是从第二个参数是所需计数Enumerable.ElementAtOrdefault创建的索引中选择元素:Enumerable.Range

IEnumerable<int> values = Enumerable.Range(0, 5)
            .Select(i => list.ElementAtOrDefault(i))
            .OrderByDescending(i => i);
于 2012-11-21T10:54:14.753 回答