我有一个班级
class grpa
{
public string file_name { get; set; }
public string folder_name { get; set; }
}
我还有2个字符串列表。
List<string> actualfiles = new List<string>();
List<string> directoryfiles= new List<string>();
我正在使用枚举器来创建类型为grpa
的对象列表IEnumerator enume1 = actualfiles.GetEnumerator();
IEnumerator enume2 = directoryfiles.GetEnumerator();
List<grpa> grp_list = new List<grpa>();
while ((enume1.MoveNext()) && (enume2.MoveNext()))
{
grp_list.Add(new grpa
{
file_name = enume1.Current.ToString(),
folder_name = enume2.Current.ToString()
});
}
我想使用自然排序对file_name之后的列表进行排序:
我有这个:
public static class SafeNativeMethods
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
public static extern int StrCmpLogicalW(string psz1, string psz2);
}
public sealed class NaturalStringComparer : IComparer<string>
{
#region IComparer<string> Members
public int Compare(string x, string y)
{
return SafeNativeMethods.StrCmpLogicalW(x, y);
}
#endregion
}
如果它是一个普通的字符串列表,我可以使用它来排序:actualfiles.Sort(new NaturalStringComparer());
但是,如何在grp_list
之后对file_name
进行排序?
答案 0 :(得分:4)
只需使用linq
var sorted = grp_list.OrderBy(x=>x.file_name, new NaturalStringComparer ()).ToList();
答案 1 :(得分:3)
您可以写下另一个IComparer
,这次IComparer<grpa>
:
public sealed class GrpaComparer : IComparer<grpa>
{
public int Compare(grpa x, grpa y)
{
return SafeNativeMethods.StrCmpLogicalW(x.file_name, y.file_name);
}
}
通过它您可以对列表进行排序:
grp_list.Sort(new GrpaComparer());
答案 2 :(得分:2)
与L.B's answer类似,但不是使用LINQ对结果列表进行排序,而是使用LINQ一次完成所有工作,使用两个枚举的操作是Zip
List<grpa> grp_list = actualfiles.Zip(directoryfiles,
(fileName, folderName) => new grpa { file_name = fileName, folder_name = folderName })
.OrderBy(x=>x.file_name, new NaturalStringComparer())
.ToList();
答案 3 :(得分:2)
您可以将NaturalString比较器包装为:
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var nev: [String] = [] // Array is now inside the class
var cim: [String] = [] // Array is now inside the class
var ar: [String] = [] // Array is now inside the class
var myIndex: Int?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let row = (self.tableView.indexPathForSelectedRow as NSIndexPath?)?.row
let vc = segue.destination as! SecondViewController
vc.myIndex = row
vc.nev = nev
vc.cim = cim
vc.ar = ar
}
class SecondViewController: UIViewController {
var myIndex: Int?
var nev: [String]?
var cim: [String]?
var ar: [String]?
答案 4 :(得分:0)
尝试在排序和使用前删除文件扩展名
List.Sort()
。可能会起作用。