【问题标题】:Group elements of Array by value (2 by 2, 3 by 3, etc…) in Java在 Java 中按值(2 x 2、3 x 3 等)对 Array 的元素进行分组
【发布时间】:2019-06-07 17:01:54
【问题描述】:

有人帮助我在 Swift 中创建了一个函数,以计算来自 ArrayList<Double>:Swift - Group elements of Array by value (2 by 2, 3 by 3, etc...) 的出现次数(2 x 2、3 x 3、10 x 10)

现在我想用 Java 翻译它,但我不确定有几行。我该怎么做?

Swift 版本:

func group(_ array: [Int], coef: Int) -> [Int: Int] {
var result:[Int:Int] = [:]

var start = array[0]
var end = start + coef - 1
var arr  = array

while start <= array[array.count - 1] {
   let count = arr.filter({ $0 >= start && $0 <= end}).count

   result[start] = count
   start = end + 1
   end = start + coef - 1
   arr = Array(arr[count...])
}
return result
}

我在 Java 中的尝试:

private HashMap<Integer, Integer> group(ArrayList<Double> array, int coef, Double start) {
        Map<Integer, Integer> result = new HashMap<>();

        Double startFrom = start;
        Double end = startFrom + Double.valueOf(coef)  - 0.1;
        ArrayList<Double> arr = array;

        // This line
        while (startFrom <= array[array.size() - 1]) {

            // This line
            int count = arr.filter({ $0 >= start && $0 <= end}).count;

            // This line
            result[Int(start)] = count;
            startFrom = end + 1;
            end = start + Double.valueOf(coef)  - 0.1;
            // this line
            arr = Array(arr[count...])
        }
        return result;
    }

【问题讨论】:

    标签: java android ios swift


    【解决方案1】:

    在 Java 中,建议使用接口而不是实际的实现,因为接口提供了更大的灵活性。如果您正在使用实现并且必须更改某些内容,那么它很容易损坏,因此您的代码将很脆弱。

    private static Map<Integer, Integer> group(List<Double> array, int coef, Double start) {
        Map<Integer, Integer> result = new HashMap<>();
    
        Double startFrom = start;
        Double finalEnd = startFrom + (double) coef - 1;
    
        while (startFrom <= array.get(array.size() - 1)) {
            int counter = 0;
            for (Double x : array) {
                if (x >= startFrom && x <= finalEnd) {
                    counter++;
                }
            }
            result.put(startFrom.intValue(), counter);
            startFrom = finalEnd + 1;
            finalEnd = startFrom + (double) coef - 1;
        }
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多