您如何通过这些字母排序以下单词?
string[] _words1 = {"road", "apple", "maple", "roam", "wind"};
string _alphabet1 = "irqjfomqwijapfpdpwe";
其中单词的每个顺序由_alphabet1确定,但诀窍是“road”应该在“漫游”之后,因为“r”类似,“o”类似“,”a“类似,” d“在_alphabet1
之后出现在”m“之后使用内置数组.Sort()及其重载。
这个问题出现在面试中,我无法做到。采访者说应该使用.Sort()重载来简化代码。
答案 0 :(得分:6)
您可以定义自己的扩展Comparer
的类。基本上,您可以使用您正在使用的修改后的“字母”来定义两个字符串相对于彼此的排序方式。
public class MyComparer : Comparer<string>
{
private string _alphabet1 = "irqjfomqwijapfpdpwe";
public override int Compare(string x, string y)
{
var minLength = Math.Min(x.Length, y.Length);
for (var i = 0; i < minLength; i++)
{
var stringXpos = _alphabet1.IndexOf(x[i]);
var stringYpos = _alphabet1.IndexOf(y[i]);
if (stringXpos < stringYpos)
return -1;
if (stringYpos < stringXpos)
return 1;
}
return x.Length < y.Length ? -1 : (x.Length > y.Length) ? 1 : 0;
}
}
然后只需在调用Array.Sort
时实例化它:
string[] _words1 = { "road", "apple", "maple", "roam", "wind" };
Array.Sort(_words1, new MyComparer());
排序后_words1
的内容:
roam
road
maple
wind
apple