出于某种奇怪的原因,sudo vim $SPARK_HOME/conf/spark-defaults.conf
#uncomment the spark.driver.memory and change it according to your use. I changed it to below
spark.driver.memory 15g
# press : and then wq! to exit vim editor
的填充顺序与DataGridViewSelectedRowCollection
中显示的顺序相反。但更令人费解的是,为什么没有一种直接的方法来反转在DataGridView
循环中使用的顺序。
我希望能够使用如此简单的语法:
foreach
...但当然,这不受支持。*
所以,目前我正在使用这个怪物:
foreach (DataGridViewRow r in dataGridView1.SelectedRows.Reverse())
......这非常丑陋和令人费解。 (我意识到我可以使用反向//reverse the default selection order:
IEnumerable<DataGridViewRow> properlyOrderedSelectedRows
= dataGridView1.SelectedRows.Cast<DataGridViewRow>().ToArray().Reverse();
foreach (DataGridViewRow r in properlyOrderedSelectedRows )
{
MessageBox.Show( r.Cells["ID"].Value.ToString());
}
循环,但我更喜欢For
的可读性。)
我在这里缺少什么?有更简单的方法吗?
* 实际上,根据discussion here,foreach
implements IEnumerable,我希望这个版本能够正常运行。但它没有编译。
答案 0 :(得分:2)
我认为你只需要为你的每个循环投射:
foreach (DataGridViewRow row in dataGridView1.SelectedRows.Cast<DataGridViewRow>().Reverse()) {
}
然而,即使它看起来代码较少也没有那么高效,因为它必须基本上通过枚举器转发将所有内容放在堆栈上,然后以相反的顺序将所有内容弹出。
如果你有一个可直接索引的集合,你肯定应该使用for循环,并以相反的顺序枚举集合。
所述答案 1 :(得分:1)
您可以将行添加到堆栈中......
stack<DataGridViewRow> properlyOrderedSelectedRows = new stack<DataGridViewRow>(dataGridView1.SelectedRows);
foreach (DataGridViewRow r in properlyOrderedSelectedRows )
{
MessageBox.Show( r.Cells["ID"].Value.ToString());
}
Stack<T>
有一个constructor,可以接受IEnumerable<T>
答案 2 :(得分:1)
但更令人费解的是,为什么没有一种简单的方法来反转在foreach循环中使用的顺序。
我希望能够使用如此简单的语法:
...
......但当然,这不受支持。*
如何让它自己工作而不是所有这些伪诙谐的陈述,&#34; monstrosities&#34;和非常低效的LINQ-es。您所需要的只是在一些常见的地方写一个单行功能。
public static IEnumerable<DataGridViewRow> GetSelectedRows(this DataGridView source)
{
for (int i = source.SelectedRows.Count - 1; i >= 0; i--)
yield return source.SelectedRows[i];
}