我目前正在使用一个应用程序,它允许通过rub脚本添加和删除下拉列表中的项目.Ruby看起来像这样
SAFE = ;
return control if control.CyclesCount == 0;
control.Items.each{|item| control.Items.Remove(item) if item.Value.index('|').nil?};
return control;
Run Code Online (Sandbox Code Playgroud)
control是自定义用户控件,其Items是ListItemCollction.我正在通过单元测试运行,以使我的Ruby代码正确并遇到麻烦.我传入的ListItemColletion看起来像这样..
var lic = new ListItemCOllection {
new ListItem {Text = "Item2", Value = "8"},
new ListItem {Text = "Item1", Value = "1"},
new ListItem {Text = "Item3", Value = "3|1"},
new ListItem {Text = "Item4", Value = "4"},
new ListItem {Text = "Item5", Value = "5|2"},
new ListItem {Text = "Item6", Value = "6"}
}
Run Code Online (Sandbox Code Playgroud)
此代码似乎总是在items集合中留下3个项目,而不是将2个项目与管道放在一起.3取决于我放置项目的顺序(按此顺序,Item1,Item3,Item5左转)这使我相信它的删除被搞砸了.我还尝试了一个集合的副本,循环它,从原始中删除,以便我没有从我正在迭代的集合中删除.我是Ruby的忠实用户,所以对我很轻松......但我可以使用一些建议.
谢谢
不建议在迭代时更改数组.有一些迭代器的目的是更改数组.
a= [1,2,3]
b= [1,2,3]
a.delete_if { |x| x == 2 } # => [1,3]
b.reject! { |x| x == 2 } # => [1,3]
a # => [1,3]
b # => [1,3]
Run Code Online (Sandbox Code Playgroud)
Array#delete_if删除数组的元素.只有一点点不同Array#reject
a= [1,2,3]
b= [1,2,3]
a.delete_if { |x| false } # => [1,3]
b.reject! { |x| false } # => nil
a # => [1,2,3]
b # => [1,2,3]
Run Code Online (Sandbox Code Playgroud)
Array#delete_if总是返回剩余的数组.Array#reject!如果数组保持不变,则返回nil.
一些更多的modifiieng迭代器,不改变原始数组:
a= [1,2,3]
a.reject { |x| x == 2 } # => [1,3]
a # => [1,2,3]
Run Code Online (Sandbox Code Playgroud)
Array#reject 返回没有被拒绝元素的数组,但不修改原始数组.
a= [1,2,3]
a.select { |x| x != 2 } # => [1,2,3]
a # => [1,3]
Run Code Online (Sandbox Code Playgroud)
Array#select 返回仅包含所选元素的数组,但不修改原始数组.
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |