【问题标题】:How to deal out 2 different length arrays by the value?如何按值处理 2 个不同长度的数组?
【发布时间】:2021-04-21 13:56:31
【问题描述】:

想想一家公司,员工以不同的身份工作。员工将根据他们的能力被雇用。每天应该有类似的容量。

我希望days数组中array1的值均匀分布。

例如:星期四 -> 2 项和 5 值,星期五 -> 1 项和 5 值 星期六 -> 1 项和 6 值,星期日 -> 2 项和 6 值。

让它以相似的数字分布。

我有 2 个这样的数组:

let days = ["Thursday","Friday","Saturday","Sunday"]
var array1: [T] = [T(name: "a", value: 3),T(name: "b", value: 2),T(name: "c", value: 5),T(name: "d", value: 1),T(name: "e", value: 6),T(name: "f", value: 4)]

如何将array1 对象分配给days 数组?

我试过了:

var arrayValueTotal = 0
for t in array1{
   arrayValueTotal = arrayValueTotal + t.value        
}


var upperLimit = Double(Double(arrayValueTotal)/Double(days.count)) // This will get value per day. 22/4 = 5.5


for i in (0...days.count-1){ //Handling the days
   for j in array1{ 
         if j.value >= Int(upperLimit){ //handling the array1's value


         }else if j.value < Int(upperLimit){
                    

         }
    }
}

想要的结果如:

    let combinedResult = [("Thursday": [T(name: "a", value: 3),
                                       T(name: "b", value: 2)]),
                          ("Friday":   [T(name: "c", value: 5)]),
                          ("Saturday": [T(name: "e", value: 6)]),
                          ("Sunday":   [T(name: "f", value: 5),
                                       T(name: "d", value: 1)])]

这是 T 类:

class T {
    var name:String
    var value:Int
    init(name:String, value:Int) {
        self.name = name
        self.value = value
    }
}

我怎样才能得到它?提前致谢。

【问题讨论】:

  • 这不是有效的语法。
  • @Alexander 更新了语法。
  • T("a":3) 应该是什么?
  • @JoakimDanielson 已更新。
  • @BorderFree 您还应该翻译所有标识符、字符串、cmets 等您这里的大多数目标受众都不会说土耳其语,因此如果您希望您的问题得到解决,您需要使用英语任何关注/互动。

标签: arrays swift dictionary


【解决方案1】:

好的,如果我理解正确,让我们先根据limit(你自己计算的)分离array1

var array1: [T] = [T(name: "a", value: 3),
                   T(name: "b", value: 2),
                   T(name: "c", value: 5),
                   T(name: "d", value: 1),
                   T(name: "e", value: 6),
                   T(name: "f", value: 4)]

let reducedArray = array1.reduce(into: [[T]]()) { result, current in
    guard var last = result.last else { result.append([current]); return }
    if last.reduce(0, { $0 + $1.value }) < limit {
        last.append(current)
        result[result.count - 1] = last
    } else {
        result.append([current])
    }
}

那么reducedArray就是:

[
  [T(name:a, value: 3), T(name:b, value: 2)],
  [T(name:c, value: 5)],
  [T(name:d, value: 1), T(name:e, value: 6)],
  [T(name:f, value: 4)]
]

然后

var final: [(String, [T])] = []
for i in 0..<min(days.count, reducedArray.count) { //If the count aren't equal, what to do with the left values?
    final.append((days[i], reducedArray[i]))
}

print("Final: \(final)")

最终存在:

[
 ("Thursday", [T(name:a, value: 3), T(name:b, value: 2)]),
 ("Friday", [T(name:c, value: 5)]),
 ("Saturday", [T(name:d, value: 1), T(name:e, value: 6)]),
 ("Sunday", [T(name:f, value: 4)])
]

【讨论】:

  • 非常棒的解决方案。尊重。
猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 2023-01-09
  • 2019-06-09
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
相关资源
最近更新 更多