2017-12-08 12 views
-1

私はIntsの配列とすべての要素がゼロであるとします。要素を均等に配分する(int値をint値の配列に追加する)

let arr: [Int] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

合計で11個の要素があります。私はこの配列の要素のうちの3つをナンバーワンにします。私はそれがこのようなものになりますように、これらの1つの値は、アレイ全体に均等に分散することにしたい:私はしかし、多くの1のを追加し、均等に分配することができるようにしたい

[0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0] 

(またはの近くにまで均等に可能な限り)どんなに多くの要素があっても。どうすればこのことができますか?

注:なぜ私がこれを必要としているのか不思議な人のために、一緒に結合すると大量のテキストを構成する一連の文字列があります。ゼロをテキストの一部と考え、そのテキストをテキストの間に追加する広告として考える。これらの広告をできるだけ均等に配信したいと思っていました。私はこれが私が必要とするものを表現する簡単な方法であると考えました。

+0

配列が9つのまたは10個の要素を持っている場合どのようにあなたが3つのものを配布するのでしょうか? –

+0

考え方は、配列が1をできるだけ均等に分配することです。私はそれがそれぞれ1つと端の間に等しい量のゼロを持つことを期待できないので、このような何かが10個の要素について十分であろう:[0、0、1、0、0、1、0、0、1、0 ]。そして、9つの要素について:[0,1,0,0,1,0,0,1,0]。 –

答えて

1

多分これを試すことができます。

var arr: [Int] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
let distribution = arr.count/3 // 3 is the number of 1s 
for (index, value) in arr.enumerated() { 
    arr[index] = (index + 1) % distribution == 0 ? 1 : value 
} 

print(arr) // [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0] 

と仮定すると、その値の分布> 1

+0

これは私が探していたものだと思います。ありがとうございました! –

関連する問題