我还没能在谷歌上找到任何东西。
我有这段代码:
<constraintlayout
width:match_parent
height:match_parent>
<logo here/>
<constraintlayout
background_here>
<constraintlayout/>
<constraintlayout/>
我实际上无法理解每个元素的作用。
它生成0到11之间的一系列数字和元素。 但是select(x =&gt; x / 2)做了什么?它只是制作成对的元素,
我知道整个东西吐出来的东西,一个带有数字对的数组,一个没有对的数字。
但完全理解它有点高于我?
(这可以在这里问一下吗?或者我应该再次删除这个问题吗?)
答案 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]