澄清选择的作用

时间:2017-08-24 09:01:07

标签: c# arrays

我还没能在谷歌上找到任何东西。

我有这段代码:

<constraintlayout
width:match_parent
height:match_parent>
    <logo here/>
    <constraintlayout
    background_here>
    <constraintlayout/>
<constraintlayout/>

我实际上无法理解每个元素的作用。

它生成0到11之间的一系列数字和元素。 但是select(x =&gt; x / 2)做了什么?它只是制作成对的元素,

我知道整个东西吐出来的东西,一个带有数字对的数组,一个没有对的数字。

但完全理解它有点高于我?

(这可以在这里问一下吗?或者我应该再次删除这个问题吗?)

4 个答案:

答案 0 :(得分:8)

  

它生成一系列0到11之间的数字和元素。但是select(x =&gt; x / 2)是做什么的? 它只是制作元素对

不,Select在某些编程语言中执行的操作称为map。它在IEnumerable<T>上调用,并且作为参数Func<T,U>有一个函数,它产生一个IEnumerable<U>,其中每个元素,如果给定的IEnumerable<T>是通过函数和结果处理的在结果中发出。

因此,在这种情况下,它将需要从0到(不包括)11的范围,并且对于每个整数,执行整数divsion:

csharp> Enumerable.Range(0, 11);
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
csharp> Enumerable.Range(0, 11).Select(x => x/2);
{ 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5 }

自:

   { 0/2, 1/2, 2/2, 3/2, 4/2, 5/2, 6/2, 7/2, 8/2, 9/2, 10/2 }
== { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5 }

稍后使用 - 随机数重新排序IEnumerable<int>(使用OrderBy)(因此我们将它们混洗)并转换为列表。

答案 1 :(得分:6)

    .Range(0, 11) // generate a sequence of integers starting at 0 and incrementing 11 times (i.e. the values 0 up to and including 10)
    .Select(x => x / 2) // divide each of those values from previous result by 2 and return them
    .OrderBy(x => r.Next()) // then order them randomly using a random number
    .ToArray(); // return the end result as an array

答案 2 :(得分:6)

Select视为对IEnumerable的每个元素进行转换。

例如,假设我们有一个这样的列表:

0 1 2 3 4 5 6 7 8 9 10

然后我们调用.Select(x => x / 2),我们说对于列表中的每个元素x,请执行以下转换:

x / 2

我们将列表中的每个元素除以2:

Original    Transformation    Result
0           0 / 2             0
1           1 / 2             0
2           2 / 2             1
3           3 / 2             1
4           4 / 2             2
5           5 / 2             2
6           6 / 2             3
7           7 / 2             3
8           8 / 2             4
9           9 / 2             4
10          10 / 2            5

我们得到了

0 0 1 1 2 2 3 3 4 4 5 5

答案 3 :(得分:4)

Select()做的是它为被调用的Enumerable的每个元素(原始列表)计算给定表达式,并返回一个新的Enumerable结果。

列表:

[2, 4, 6]

它会回来:

[2/2, 4/2, 6/2]

其中/表示&#34; division&#34;,因此Select()(不是整个LINQ链)的结果将是:

[1, 2, 3]

类似地,如果您的源列表是:

words = ["dog", "child", "building"]

你打电话:

words.Select(word => word.Length)

按顺序获取列表中所有字符串长度的列表:

[3, 5, 7]