如何从存储颜色对应面起始索引的数组中提取元素?
Got it, let's break down how to pull out the faces each color covers from your array. First, let's lock in the pattern of your array based on the examples you shared:
Core Structure Rules
- Your array (let’s call it
color_starts) stores the starting face index for each color, plus a final value that marks the end of the last color’s face range. - For any color
c(0-indexed), the faces it covers are fromcolor_starts[c]up tocolor_starts[c+1] - 1. - Quick note on the single-color case: If the cube is all one color, I think you might have meant the array would be
[0, total_faces](since all 6 faces start at 0 and end at 5 for a 6-face cube). Thearray[0]=0, array[1]=1...structure you mentioned would actually map each face to its own color—so I’ll cover both scenarios just in case.
Example Walkthrough (Your 6-Face Cube)
Take your sample array: color_starts = [0, 2, 4, 5]
- Color 0: Starts at 0, next color starts at 2 → covers faces
0, 1 - Color 1: Starts at 2, next color starts at 4 → covers faces
2, 3 - Color 2: Starts at 4, final marker is 5 → covers face
4
(If you meant to include face 5 for color 2, the final array value should be 6 instead of 5.)
Code Implementation (Python)
I’ve put together a function that takes your array and the total number of faces, then returns a dictionary mapping each color to its list of faces. It handles edge cases like the last color’s range and ensures we don’t go beyond the cube’s total faces:
def get_color_to_faces(color_starts, total_faces): color_faces = {} num_colors = len(color_starts) - 1 # Last element is the end marker for color_idx in range(num_colors): start_face = color_starts[color_idx] # Calculate end face: use next start minus 1, cap at total_faces -1 for the last color if color_idx == num_colors - 1: end_face = min(color_starts[color_idx + 1] - 1, total_faces - 1) else: end_face = color_starts[color_idx + 1] - 1 # Generate the list of faces (inclusive of start and end) faces = list(range(start_face, end_face + 1)) color_faces[color_idx] = faces return color_faces
Test with Your Sample
# 6-face cube, your example array total_faces = 6 sample_starts = [0, 2, 4, 5] result = get_color_to_faces(sample_starts, total_faces) print(result) # Output: {0: [0, 1], 1: [2, 3], 2: [4]}
Test Single-Color Cube (Correct Structure)
If all faces are one color, use an array like [0, 6] for 6 faces:
single_color_starts = [0, 6] single_color_result = get_color_to_faces(single_color_starts, total_faces=6) print(single_color_result) # Output: {0: [0, 1, 2, 3, 4, 5]}
Test the "All Faces Same Color But Array is [0,1,2,3,4,5,6]"
If your array is structured this way (each face's start is itself), the function will map each index to a single face (which is effectively 6 distinct colors):
weird_single_color_starts = [0, 1, 2, 3, 4, 5, 6] weird_result = get_color_to_faces(weird_single_color_starts, total_faces=6) print(weird_result) # Output: {0: [0], 1: [1], 2: [2], 3: [3], 4: [4], 5: [5]}
Edge Cases to Keep in Mind
- If your array’s final value is less than
total_faces, the remaining faces won’t be assigned to any color. Adjust the final value tototal_facesif you want all faces covered. - If you have duplicate start indices (e.g.,
[0, 0, 2]), the function will return an empty list for that color. You can add a quick check to skip empty entries if needed:if faces: color_faces[color_idx] = faces
内容的提问来源于stack exchange,提问作者Divya

