Go 美化丑陋的三个嵌套循环

Go 美化丑陋的三个嵌套循环,go,nested-loops,Go,Nested Loops,美化这个功能最有效的方法是什么? 这就是我所想到的,有点像是在耍把戏,但它实在太难看了,任何帮助美化它的人都将不胜感激 如果可能的话,我们也希望能够否定这个函数。 我是否可以不使用函数文字、映射等 var UsageTypes = []string{ "PHYSICAL_SIZE", "PHYSICAL_SIZE", "PROVISIONED_SIZE", "SNAPSHOT_SIZE", "LOGICAL_SIZE_PERCENTAGE", "TOTAL_VOLUME_SIZE", "ALLO

美化这个功能最有效的方法是什么? 这就是我所想到的,有点像是在耍把戏,但它实在太难看了,任何帮助美化它的人都将不胜感激

如果可能的话,我们也希望能够否定这个函数。 我是否可以不使用函数文字、映射等

var UsageTypes = []string{
"PHYSICAL_SIZE",
"PHYSICAL_SIZE",
"PROVISIONED_SIZE",
"SNAPSHOT_SIZE",
"LOGICAL_SIZE_PERCENTAGE",
"TOTAL_VOLUME_SIZE",
"ALLOCATED_SIZE",
"ALLOCATED_USED",
"TOTAL_LOGICAL_SIZE",
"TOTAL_LOGICAL_SIZE_PERCENTAGE",
"TOTAL_SNAPSHOT_SIZE",
"LOGICAL_OR_ALLOCATED_GREATER_SIZE",
}

var MeasuredTypes = []string{
"LIF_RECEIVED_DATA",
"ECEIVED_ERRORS",
"LIF_RECEIVED_PACKET",
"LIF_SENT_DATA",
"LIF_SENT_ERRORS",
"LIF_SENT_PACKET",
"LINK_CURRENT_STATE",
"RX_BYTES",
"RX_DISCARDS",
"RX_CRC_ERRORS",
"RX_ERRORS",
"RX_FRAMES",
"LINK_UP_TO_DOWNS",
"TX_BYTES",
"TX_DISCARDS",
"TX_ERRORS",
"TX_HW_ERRORS",
"TX_FRAMES",
"LOGICAL_OR_ALLOCATED_GREATER_SIZE",
"LOGICAL_SIZE",
"PHYSICAL_SIZE",
"PROVISIONED_SIZE",
"SNAPSHOT_SIZE",
"VOLUME_ONLINE",
"TOTAL_THROUGHPUT",
"LOGICAL_SIZE_PERCENTAGE",
"READ_THROUGHPUT",
"WRITE_THROUGHPUT",
"OTHER_THROUGHPUT",
"TOTAL_IOPS",
"WRITE_IOPS",
"READ_IOPS",
"OTHER_IOPS",
"AVERAGE_TOTAL_LATENCY",
"AVERAGE_WRITE_LATENCY",
"AVERAGE_READ_LATENCY",
"AVERAGE_OTHER_LATENCY",
"FILESYSTEM_READ_OPS",
"FILESYSTEM_WRITE_OPS",
"FILESYSTEM_TOTAL_OPS",
"FILESYSTEM_OTHER_OPS",
"IO_BYTES_PER_READ_OPS",
"IO_BYTES_PER_WRITE_OPS",
"IO_BYTES_PER_OTHER_OPS",
"IO_BYTES_PER_TOTAL_OPS",
"READ_IO",
"WRITE_IO",
"TOTAL_IO",
"OTHER_IO",
"ACTIVE_CONNECTIONS",
"TOTAL_VOLUME_SIZE",
"ALLOCATED_SIZE",
"ALLOCATED_USED",
"TOTAL_LOGICAL_SIZE",
"TOTAL_LOGICAL_SIZE_PERCENTAGE",
"TOTAL_SNAPSHOT_SIZE",
"ONTAP_CAPACITY_DISK_CAPACITY",
"ONTAP_CAPACITY_TOTAL_STORAGE_EFFICIENCY_RATIO",
"ONTAP_CAPACITY_TOTAL_PHYSICAL_USED",
"ONTAP_CAPACITY_SIZE_USED",
"ONTAP_CAPACITY_MEMORY",
"ONTAP_CAPACITY_AVERAGE_PROCESSOR_BUSY",
"ONTAP_CAPACITY_PEAK_PROCESSOR_BUSY",
}

func isMeasuredTypeAUsageMetric(measuredTypeIn []string) []string {
  result := []string{}
  for i, _ := range measuredTypeIn {
    var foundInBigList bool
      for j, _ := range MeasuredTypes {
        if measuredTypeIn[i] == MeasuredTypes[j] {
          foundInBigList = true
          fmt.Println("found in big list: ", measuredTypeIn[i])
          for k, _ := range UsageTypes {
            if measuredTypeIn[i] == UsageTypes[k] {
              fmt.Println("found in inner list: ", measuredTypeIn[i])
              result = append(result, measuredTypeIn[i])
            }
          }
        }
      }
      if foundInBigList == false {
        fmt.Println("not found, throw exception")
      }
    }
    return result
  }

func main() {
  measuredTypeIn := []string{"LOGICAL_SIZE_PERCENTAGE", "LOGICAL_OR_ALLOCATED_GREATER_SIZE", "BUKK", "ONTAP_CAPACITY_PEAK_PROCESSOR_BUSY",}
  fmt.Println(isMeasuredTypeAUsageMetric(measuredTypeIn))
}

您需要的是正确的抽象级别:

func has(in string[], item string) bool {
   for _,x:=range in {
      if x==item {
        return true
      }
   }
   return false
}
func isMeasuredTypeAUsageMetric(measuredTypeIn []string) []string {
  result:=[]string{}
  for _,item:=range measuredTypeIn {
      if has(MeasuredTypes,item) {
         if has(UsageTypes,item) {
            result=append(result,item)
         }
      } else {
        ///error
     }
  }
  return result
}
这可以通过使用
map[string]bool
而不是[]字符串来进一步简化

var MeasuredTypes=map[string]bool{"itemInUsageTypes": true,
"itemNotInUsageTypes":false,
...
}
然后你可以做:

usage,measured:=MeasuredTypes[item]
if measured {
  // It is measured type
  if usage {
     // It is usage type
  }
}

我如何使用地图来实现这一点?