我有(Boolean, Int, String)
形式的元组。
我想定义Ordering,它按以下顺序对元组进行排序:
布尔值 - 逆序
Int - 逆序
字符串 - 常规订单
示例:
对于元组:Array((false, 8, "zz"), (false,3, "bb"), (true, 5, "cc"),(false, 3,"dd"))
。
订购应该是:
(true, 5, "cc")
(false, 8,"zz")
(false, 3, "bb")
(false, 3, "dd")
我无法找到一种方法来定义一些反向排序和一些常规排序。
答案 0 :(得分:12)
在这种特定情况下的直接解决方案是在元组上使用sortBy
,在运行中修改为"反转"第一个和第二个元素,以便最终排序顺序:
val a = Array((false, 8, "zz"), (false,3, "bb"), (true, 5, "cc"),(false, 3,"dd"))
a.sortBy{ case (x,y,z) => (!x, -y, z) }
如果你不能轻易地"反转"一个值(比如说这是一个参考对象,你对它们进行了不透明的排序),你可以改用
sorted
并显式传递构造的顺序以反转第一个和第二个元素的顺序(您可以使用Ordering.reverse
来反转排序):
val myOrdering: Ordering[(Boolean, Int, String)] = Ordering.Tuple3(Ordering.Boolean.reverse, Ordering.Int.reverse, Ordering.String)
a.sorted(myOrdering)
答案 1 :(得分:-1)
你可以这样做。
Mutex mutex;
try
{
mutex = Mutex.OpenExisting("SINGLEINSTANCE");
if (mutex!= null)
{
Console.WriteLine("Error, 1 instance Only");
Application.Exit();
}
}
catch (WaitHandleCannotBeOpenedException ex)
{
mutex = new Mutex(true, "SINGLEINSTANCE");
}