2013-01-18 51 views
3

要做的最佳方法是什么?给定字符串A和字符串C的集合,以字符串中A的位置的非递减顺序排列集合中的字符串。按另一个字符串的位置对字符串进行排序

例如,

A= abc 
C= [deabc, abc, dabc, dad] 
Sorted C= [abc, dabc, deabc] 

我的想法是遍历集合并把它放在一个HashMap /词典与A在C中的位置[I]为指标。然后从HashMap构造排序后的集合。这不是一个家庭作业问题。只是想知道这样做的有效方式/算法。任何指针都会有帮助。

+1

你可以使用[LINQ](http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx)吗? – mellamokb

+0

是的,我可以使用LINQ。 – ABC

+1

'var results = yourList.OrderBy(str => str.IndexOf(“abc”))' –

回答

4

这里有一个简单的方法使用LINQ:即不包含字符串

var SortedC = C.OrderBy (d => d.IndexOf(A)).ToArray(); 

注会在开始进行排序,因为IndexOf回报-1。此外,具有相同索引的字符串A的行为是未定义的,并且将以任意顺序返回,除非您提供了排序来处理这些行为。

+0

也许你的意思是'd.IndexOf(a)'? –

+0

@IlyaIvanov:是的,谢谢,我误解了这个问题。 – mellamokb

+1

如果字符串很长,也许可以很方便的做:'var sorted = C.Select(x => new {Str = x,Pos = x.IndexOf(A)})。OrderBy(x => x.Pos) .Select(x => x.Str);' – digEmAll

1
stringsArray.OrderBy(s => s.IndexOf("a")) 
相关问题