用Python設計檔案系統


假設我們必須設計一個提供以下兩個功能的檔案系統:

  1. createPath(path, value) − 如果可能,此函式建立一個新路徑併為其關聯一個值,並返回 True。如果路徑已存在或其父路徑不存在,則返回 False。
  2. get(path) − 此函式查詢與路徑關聯的值,如果路徑不存在,則返回 -1。

路徑的格式是由一個或多個以“/”開頭,後跟一個或多個小寫英文字母的字串連線而成。例如,/programming 和 /programming/problems 是有效的路徑,而空字串和 / 不是。這裡我們必須實現這兩個函式。

例如,如果我們建立一個檔案系統,然後使用 [‘/a’, 1] 建立一個路徑,那麼在使用 get() 函式和引數 [‘/a’] 後,輸出將為 1。

為了解決這個問題,我們將遵循以下步驟:

  • 定義一個對映 d
  • createPath 方法將接收路徑和值,其工作方式如下:
  • p := 透過“/”分割路徑得到的元件列表
  • x := d
  • 對於範圍從 1 到 p 的長度減 1 的 i
    • 如果 x 中不存在 p[i],則返回 false
    • x := x[p[i]][1]
  • 如果 x 中存在 p 的最後一個元素,則返回 false
  • x[p 的最後一個元素] := 包含 v 和空對映的列表
  • 返回 true
  • get() 方法接收路徑
  • x := d
  • p := 透過“/”分割路徑得到的元件列表
  • 對於範圍從 1 到 p 的長度減 1 的 i
    • 如果 x 中不存在 p[i],則返回 -1
    • x := x[p[i]][1]
  • 如果 x 中存在 p 的最後一個元素,則返回 x[p 的最後一個元素][0],否則返回 -1

示例(Python)

讓我們來看下面的實現,以便更好地理解:

 線上演示

class FileSystem(object):
   def __init__(self):
      self.d = {}
   def create(self, p, v):
      p = p.split("/")
      x = self.d
      for i in range(1,len(p)-1):
         if p[i] not in x:
            return False
         x = x[p[i]][1]
      if p[-1] in x:
         return False
      x[p[-1]] = [v,{}]
      return True
   def get(self, p):
      x = self.d
      p = p.split("/")
      for i in range(1,len(p)-1):
         if p[i] not in x:
            return -1
         x= x[p[i]][1]
      if p[-1] in x:
         return x[p[-1]][0]
      else:
         return -1
ob = FileSystem()
print(ob.create("/a", 1))
print(ob.get("/a"))

輸入

Initialize the object, then call createPath(“/a”, 1) and get(“/a”)

輸出

True
1

更新於:2020年4月30日

2K+ 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.