본문 바로가기
파이썬

파이썬 Map의 키 배열 가져 오기

by º기록 2021. 1. 19.
반응형

저는 파이썬 기반으로 Java를 배우려고 노력하고 있으므로 저를 참아주세요.

Sieve of Eratosthenes 메서드를 구현하고 있습니다 (Python에 하나가 있습니다. Java로 변환하려고합니다).

def prevPrimes(n):
    """Generates a list of primes up to 'n'"""
    primes_dict = {i : True for i in range(3, n + 1, 2)}
    for i in primes_dict:
        if primes_dict[i]:
            num = i
        while (num * i <= n):
            primes_dict[num*i] = False
            num += 2
    primes_dict[2] = True
    return [num for num in primes_dict if primes_dict[num]]

이것이 Java로 변환하려는 시도입니다.

import java.util.*;
public class Sieve {
    public static void sieve(int n){
        System.out.println(n);
        Map primes = new HashMap();
        for(int x = 0; x < n+1; x++){
            primes.put(x, true);
        }
        Set primeKeys = primes.keySet();
        int[] keys = toArray(primeKeys);  // attempt to convert the set to an array
        System.out.println(primesKeys); // the conversion does not work
        for(int x: keys){
            System.out.println(x);
        }
        // still have more to add
        System.out.println(primes);
    }
}

내가 얻는 오류는 toArray (java.util.Set) 메소드를 찾을 수 없다는 것입니다. 이 문제를 어떻게 해결할 수 있습니까?

 

해결 방법

 

우선 제네릭을 사용하십시오.

Map<Integer, Boolean> map = new HashMap<Integer, Boolean>();
Set<Integer> keys = map.keySet();

둘째, 집합을 배열로 변환하려면 toArray (T [] a) 를 사용할 수 있습니다.

Integer[] array = keys.toArray(new Integer[keys.size()]);

Integer 대신 int 를 원하는 경우 각 요소를 반복합니다.

int[] array = new int[keys.size()];
int index = 0;
for(Integer element : keys) array[index++] = element.intValue();

 

참조 페이지 https://stackoverflow.com/questions/16203880

 

 

반응형

댓글