如何優雅地判斷 N 個布爾值是否全部相等?
如何判斷 N 個布爾值是否全等,N 大於等於 2。
語言:JavaScript,java------------------------ 分割線 -----------------------2016.11.28
return arr.indexOf(!arr[0])&<0;
還是 Milo Yip 的方法精簡,謝謝!使用了 ES5 中的 Array.prototype.indexOf() 方法,兼容 IE9 +
順便扒了一下 indexOf 的實現源碼,實現機制是:遍歷(while) + 強等於判斷(===),有興趣的可以看一下(Array.prototype.indexOf())。------------------------ 分割線 -----------------------2016.11.24參考 Jon Lee 的第一個,想到個類似的:
var arr1 = [true, true, true, true],
arr2 = [true, true, false, true],
arr3 = [false, false, false, false];var str1 = arr1.toString(), // "true,true,true,true"
str2 = arr2.toString(); // "true,true,false,true"
str3 = arr3.toString(); // "false,false,false,false"console.log( str1.indexOf("true"), str1.indexOf("false") ); // 0 -1
console.log( str2.indexOf("true"), str2.indexOf("false") ); // 0 10
console.log( str3.indexOf("true"), str3.indexOf("false") ); // -1 0function isAllBoolEqual( arr ) {
var str = "",
trueIndex = 0,
falseIndex = 0;str = arr.toString();
trueIndex = str.indexOf( "true" );
falseIndex = str.indexOf( "false" );return !(trueIndex &>= 0 falseIndex &>= 0);
}console.log( isAllBoolEqual(arr1) ); // true
console.log( isAllBoolEqual(arr2) ); // false
console.log( isAllBoolEqual(arr3) ); // true
return arr.indexOf(!arr[0])&<0;
----
更新:沒想到有這麼多贊,在 知乎專欄 解釋一下。arr.every(b =&> b === arr[0]);
這個方法的優點就是語義與問題一致。另外可以處理數組為空的情況,空數組內沒有不相等的布爾值,因此也應該返回true。
假裝比 @Milo Yip 菊苣更短:
return !arr.includes(!arr[0])
return new Set(l).size === 1;
return new HashSet&<&>(l).size() == 1;
題主想要怎麼個優雅?
一行(慢):return array.min() == array.max();
long n = array.count(true);
return n == array.size() || n == 0;
return adjacent_find(array.begin(), array.end()
[](bool lhs, bool rhs)
{ return lhs != rhs; }) == array.end();
?
前段時間項目里正好有這個需求要用…上一下自己的代碼
Java 運行環境JDK8boolean a = true;
boolean b = true;
boolean c = true;
boolean d = true;
boolean e = true;
boolean f = true;
boolean g = true;
boolean h = false;
System.out.println(Stream.of(a,b,c,d,e,f,g).collect(Collectors.toSet()).size() == 1); // true
System.out.println(Stream.of(a,b,c,d,e,f,g,h).collect(Collectors.toSet()).size() == 1); // false
python版的
return len(set(a)) == 1
放棄用bool改用bit。。bitmap==0||!(bitmap&<&<(32-N))&>&>(32-N)==0
只是看上去優雅,實際上還是遍歷O(n)
vec == |vec
如果vec全0,那麼得到0==0,表達式為真;如果vec全1,那麼得到1==1,表達式為真;
如果vec有0有1,那麼得到0==1,表達式為假。另解(比較容易實現,但沒有上面那個優雅):sum = SUM(vec)return sum == 0 || sum == len(vec)能否用bit位來存?直接判斷整個int是否=0
強行來個Python版的:
all(array) or not any(array)
強行lua一發,一點也不優雅,甚至有些臟:return pcall(table.sort,arr,function(a,b) return a~=b and error() or false end)
來一個強行python版~
return sum(mylist) % len(mylist) == 0解釋就是,求和時True為1,False為0,所以全部為false時sum為零,全部為True時sum等於list長度,只有在這兩種情況下sum除以len才能餘數為0。如果list中有true有false,那得到的數肯定大於零、小於list長度。推薦閱讀:
※大學計算機專業翹掉所有課自學可以嗎?
※大家都說寫代碼的吃的是青春飯,那麼那些學計算機的是不是40歲以後沒事幹了?
※一個無限不循環數,如圓周率,假設我取它的足夠多位,那麼它以後無論接著取多少位,它的每個數字出現的頻率?
※計算機專業的學生怎麼通過Upwork來賺錢?
※《深入理解計算機系統》這本書需要什麼水平能看懂?
TAG:JavaScript | 演算法 | 計算機 | 演算法與數據結構 |