如果我有这个数组:
["A", "B", "C", "D"]
我有这个字符串:
"C"
我想对数组重新排序,如下所示:
["C", "A", "B", "D"]
因此,传入的字符串会将匹配的元素移到列表的开头。
答案 0 :(得分:3)
Dim myDir As DirectoryInfo = New DirectoryInfo("c:\temp\")
If (myDir.EnumerateFiles().Any()) Then
foreach ....
else
MessageBox.Show("no files in directory ") <-- my message
或
a = ['A', 'B', 'C', 'D', 'C']
target = 'C'
a.partition { |e| e==target }.reduce(:+)
#=> ["C", "C", "A", "B", "D"]
a.select { |e| e==target }.concat(a.reject { |e| e==target })
#=> ["C", "C", "A", "B", "D"]
未修改。
答案 1 :(得分:1)
如果您实际上想对数组进行排序,那么它将起作用:
a = ['A', 'B', 'C', 'D']
a.sort_by.with_index { |e, i| [e == 'C' ? 0 : 1, i] }
#=> ["C", "A", "B", "D"]
否则,您只能从数组中delete
'C'
并对其进行prepend
:
a.prepend(a.delete('C'))
#=> ["C", "A", "B", "D"]
请注意,这将修改a
。
答案 2 :(得分:1)
如果您有非唯一目标字符串:
ary = ["A", "B", "C", "D", "C"]
target = "C"
ary.count(target).times.map{ target } + ary.reject{ |e| e == target }
#=> ["C", "C", "A", "B", "D"]
我必须找到一种更优雅的方式...
ary.find_all{ |e| e == target } + ary.tap { |a| a.delete target }