我有一个文本文件,其中包含以下格式的值: for (var z=0; z<dlength; z++) {
var thead = "<thead class='thead"+z+"'><tr><th class='center'><label class='pos-rel'><input type='checkbox' class='ace'><span class='lbl'></span></label></th><th class='center'>"+disarray[z]+"</th></tr></thead>";
$('#add-table').append(thead);
alldata.forEach(function(e, i){
if(alldata[i]['section_name'] == disarray[z]){
var tbody = "<tbody class='tbody"+z+"'><tr><td class='center'><label class='pos-rel'><input type='checkbox' class='ace'><span class='lbl'></span></label></td><td>"+alldata[i]['emp_Fullname']+"</td></tr></tbody>"
$('#add-table').append(tbody);
console.log(alldata[i]['section_name']);
}
});
//And for the first simple table, which doesn't have TableTools or dataTables
//select/deselect all rows according to table header checkbox
var active_class = 'active';
//Here is the change thead.thead0
$("#add-table > thead.thead0 > tr > th input[type=checkbox]").eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
$(this).closest('table').find("tbody.tbody0 > tr").each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
});
});
console.log(z);
//Here is the change thead.thead1
$("#add-table > thead.thead1 > tr > th input[type=checkbox]").eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
$(this).closest('table').find("tbody.tbody1 > tr").each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
});
});
$("#add-table > thead.thead2 > tr > th input[type=checkbox]").eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
$(this).closest('table').find("tbody.tbody2 > tr").each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
});
});
$("#add-table > thead.thead3 > tr > th input[type=checkbox]").eq(0).on('click', function(){
var th_checked = this.checked;//checkbox inside "TH" table header
$(this).closest('table').find("tbody.tbody3 > tr").each(function(){
var row = this;
if(th_checked) $(row).addClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', true);
else $(row).removeClass(active_class).find('input[type=checkbox]').eq(0).prop('checked', false);
});
});
//select/deselect a row when the checkbox is checked/unchecked
$('#add-table').on('click', 'td input[type=checkbox]' , function(){
var $row = $(this).closest('tr');
if(this.checked) $row.addClass(active_class);
else $row.removeClass(active_class);
});
}
:
Time|ID
现在我想按时间对它们进行排序。输出也应该是:
180|1
60 |2
120|3
我该如何解决这个问题?有了这个:
60 |2
120|3
180|1
我没有成功......
答案 0 :(得分:4)
完成这项工作需要3个步骤:
1)由分隔符
分割 2)转换为int
,因为在字符串比较中,6位于1或10之后
3)使用OrderBy对您的收藏品进行排序
以下是执行所有3个步骤的一行中的linq解决方案:
list = list.OrderBy(x => Convert.ToInt32(x.Split('|')[0])).ToList();
解释
x =>
lambda表达式,x表示列表中的单个元素
x.Split('|')[0]
分割每个字符串并仅占用它的第一部分(时间)
Convert.ToInt32(..
将时间转换为数字,以便按照您希望的方式进行排序
list.OrderBy(
对您的收藏品进行排序
修改强>
只是为了理解为什么你在这里得到结果是一个使用CompareTo方法比较字符串表示中数字的例子:
int res = "6".CompareTo("10");
res的值为1
(意味着6大于10或6跟随10)
根据文件 - &gt;备注:
CompareTo方法主要用于排序或字母顺序操作。
答案 1 :(得分:1)
您应该解析文件内容的每一行,并将值作为数字。
string[] lines = File.ReadAllLines("path");
// ID, time
var dict = new Dictionary<int, int>();
// Processing each line of the file content
foreach (var line in lines)
{
string[] splitted = line.Split('|');
int time = Convert.ToInt32(splitted[0]);
int ID = Convert.ToInt32(splitted[1]);
// Key = ID, Value = Time
dict.Add(ID, time);
}
var orderedListByID = dict.OrderBy(x => x.Key).ToList();
var orderedListByTime = dict.OrderBy(x => x.Value).ToList();
请注意,我将ID
引用用作字典Key
,假设ID
应该是唯一的。
短代码
// Key = ID Value = Time
var orderedListByID = lines.Select(x => x.Split('|')).ToDictionary(x => Convert.ToInt32(x[1]), x => Convert.ToInt32(x[0])).OrderBy(x => x.Key).ToList();
var orderedListByTime = lines.Select(x => x.Split('|')).ToDictionary(x => Convert.ToInt32(x[1]), x => Convert.ToInt32(x[0])).OrderBy(x => x.Value).ToList();
答案 2 :(得分:0)
您需要先将它们转换为数字。按字符串排序不会给你带来有意义的结果。
times = list.Select(l => l.Split('|')[0]).Select(Int32.Parse);
ids = list.Select(l => l.Split('|')[1]).Select(Int32.Parse);
pairs = times.Zip(ids, (t, id) => new{Time = t, Id = id})
.OrderBy(x => x.Time)
.ToList();
答案 3 :(得分:0)
谢谢大家,这是我的解决方案:
var path = @"C:\Users\admin\Desktop\test.txt";
List<string> list = File.ReadAllLines(path).ToList();
list = list.OrderBy(x => Convert.ToInt32(x.Split('|')[0])).ToList();
for(var i = 0; i < list.Count; i++)
{
Console.WriteLine(list[i]);
}
答案 4 :(得分:0)
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class TestClass {
public static void main(String[] args) {
List <LineItem> myList = new ArrayList<LineItem>();
myList.add(LineItem.getLineItem(500, 30));
myList.add(LineItem.getLineItem(300, 20));
myList.add(LineItem.getLineItem(900, 100));
System.out.println(myList);
Collections.sort(myList);
System.out.println("list after sort");
System.out.println(myList);
}
}
class LineItem implements Comparable<LineItem>{
int time;
int id ;
@Override
public String toString() {
return ""+ time + "|"+ id + " ";
}
@Override
public int compareTo(LineItem o) {
return this.time-o.time;
}
public static LineItem getLineItem( int time, int id ){
LineItem l = new LineItem();
l.time=time;
l.id=id;
return l;
}
}